﻿using System;
using System.Collections.Generic;
using Server.Engines.GroupSystem;
using Server.Mobiles;

namespace Server.Gumps
{
    public class GruppoInfoGump : Gump
    {
        PlayerMobile Player;
        List<PlayerMobile> GiocatoriRimuovibili;

        public GruppoInfoGump(PlayerMobile player)
            : base(0, 0)
        {
            Player = player;

            if (Player.Gruppo == null)
                return;

            GiocatoriRimuovibili = new List<PlayerMobile>();

            this.Closable = true;
            this.Disposable = true;
            this.Dragable = true;
            this.Resizable = false;
            this.AddPage(0);
            this.AddImage(0, 0, 9390);
            this.AddImage(113, 0, 9391);
            this.AddImage(170, 0, 9392);
            this.AddImage(170, 140, 9395);
            this.AddImage(170, 182, 9395);
            this.AddImage(170, 224, 9395);
            this.AddImage(170, 265, 9395);
            this.AddImage(0, 140, 9393);
            this.AddImage(0, 181, 9393);
            this.AddImage(0, 222, 9393);
            this.AddImage(0, 263, 9393);
            this.AddImage(114, 140, 9394);
            this.AddImage(113, 180, 9394);
            this.AddImage(114, 222, 9394);
            this.AddImage(113, 264, 9394);
            this.AddImage(169, 305, 9398);
            this.AddImage(-1, 305, 9396);
            this.AddImage(-35, 23, 10440);
            this.AddImage(113, 305, 9397);

            this.AddImage(48, 40, 1123);
            this.AddLabel(71, 39, 0x480, Player.Gruppo.Fondatore.Name);

            int yPosition = 95;
            int counter = 0;

            
            foreach (PlayerMobile p in Player.Gruppo.Partecipanti)
            {
                counter++;

                if (p == Player.Gruppo.Fondatore)
                    continue;

                this.AddImage(48, yPosition+1, 1123);
                this.AddLabel(102, yPosition, 0x480, p.Name);
                yPosition += 33;

                GiocatoriRimuovibili.Add(p);
            }

            for (int i = 0; i < (Player.Gruppo.maxPartecipanti - counter); i++)
            {
                this.AddImage(48, yPosition+1, 1123);
                this.AddLabel(102, yPosition, 0x480, @"Nessuno");
                yPosition += 33;

            }

            this.AddImage(16, 66, 96);
            this.AddImage(91, 66, 96);

            this.AddButton(31, 99, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveSecondo, GumpButtonType.Reply, 0);
            this.AddButton(31, 132, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveTerzo, GumpButtonType.Reply, 0);
            this.AddButton(31, 165, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveQuarto, GumpButtonType.Reply, 0);
            this.AddButton(31, 198, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveQuinto, GumpButtonType.Reply, 0);
            this.AddButton(31, 231, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveSesto, GumpButtonType.Reply, 0);
            this.AddButton(31, 264, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveSettimo, GumpButtonType.Reply, 0);
            this.AddButton(31, 297, 2103, 2103, (int)GruppoInfoGumpButtons.RemoveOttavo, GumpButtonType.Reply, 0);
            
            this.AddButton(61, 357, 2642, 2642, (int)GruppoInfoGumpButtons.ButtonAggiungi, GumpButtonType.Reply, 0);
            this.AddButton(176, 357, 2642, 2642, (int)GruppoInfoGumpButtons.ButtonDisperdi, GumpButtonType.Reply, 0);
            this.AddLabel(55, 330, 0x480, @"Aggiungi ");
            this.AddLabel(152, 330, 0x480, @"Esci/Disperdi");
            this.AddImage(238, 31, 10410);
            this.AddImage(237, 181, 10411);
            this.AddImage(236, 337, 10412);
            this.AddImage(120, 369, 10450);

        }

        public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
        {
            switch (info.ButtonID)
            {
                case (int)GruppoInfoGumpButtons.RemoveSecondo:
                case (int)GruppoInfoGumpButtons.RemoveTerzo:         
                case (int)GruppoInfoGumpButtons.RemoveQuarto:          
                case (int)GruppoInfoGumpButtons.RemoveQuinto:           
                case (int)GruppoInfoGumpButtons.RemoveSesto:            
                case (int)GruppoInfoGumpButtons.RemoveSettimo:            
                case (int)GruppoInfoGumpButtons.RemoveOttavo:

                    if (Player.Gruppo == null)
                    {
                        return;
                    }

                    if (Player != Player.Gruppo.Fondatore)
                    {
                        Player.SendMessage("Solo il fondatore puo' rimuovere un PG dal gruppo");
                        return;
                    }

                    int counter = 0;
                    foreach (PlayerMobile p in GiocatoriRimuovibili)
                    {
                        if (counter == info.ButtonID - 1)
                        {
                            Player.Gruppo.RimuoviPartecipante(p);
                            return;
                        }
                        counter++;
                    }
                    break;
                case (int)GruppoInfoGumpButtons.ButtonAggiungi:
                    Player.SendGump(this); // tiene il gump aperto
                    Player.Target = new GruppaPlayerTarget(); 
                    break;
                case (int)GruppoInfoGumpButtons.ButtonDisperdi:
                    if (Player != Player.Gruppo.Fondatore)
                    {
                        Player.Gruppo.RimuoviPartecipante(Player);
                        Player.Gruppo = null;

                        return;
                    }

                    Player.Gruppo.Disperdi();
                    break;
                default:
                    // Nothing to do
                    break;
            }
        }

        public enum GruppoInfoGumpButtons
        {
            RemoveSecondo = 1,
            RemoveTerzo = 2,
            RemoveQuarto = 3,
            RemoveQuinto = 4,
            RemoveSesto = 5,
            RemoveSettimo = 6,
            RemoveOttavo = 7,
            ButtonAggiungi = 8,
            ButtonDisperdi = 9,
        }
    }

    public class RichiestaGruppoGump : Gump
    {
        PlayerMobile Richiedente;
        PlayerMobile Destinatario;

        public RichiestaGruppoGump(PlayerMobile richiedente, PlayerMobile destinatario)
            : base(0, 0)
        {
            Richiedente = richiedente;
            Destinatario = destinatario;


            this.Closable = true;
            this.Disposable = true;
            this.Dragable = true;
            this.Resizable = false;
            this.AddPage(0);
            this.AddImage(0, 0, 83);
            this.AddImage(246, 2, 85);
            this.AddImageTiled(0, 13, 17, 112, 86);
            this.AddImageTiled(16, 0, 230, 11, 84);
            this.AddImageTiled(246, 17, 13, 112, 88);
            this.AddImage(0, 125, 89);
            this.AddImage(246, 125, 91);
            this.AddImageTiled(16, 125, 230, 11, 84);
            this.AddImageTiled(16, 11, 230, 119, 87);
            this.AddLabel(27, 19, 0x480, richiedente.Name);
            this.AddLabel(27, 45, 0x480, @"ti ha invitato nel suo gruppo");
            this.AddButton(43, 89, 247, 248, (int)GruppoInfoGumpButtons.ButtonOk, GumpButtonType.Reply, 0);
            this.AddButton(157, 89, 242, 241, (int)GruppoInfoGumpButtons.ButtonCancel, GumpButtonType.Reply, 0);

        }

        public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
        {
            if (info.ButtonID == (int)GruppoInfoGumpButtons.ButtonOk)
            {
                if (Richiedente.Gruppo != null)
                {
                    Richiedente.Gruppo.AggiungiPartecipante(Destinatario);
                }
            }
        }

        public enum GruppoInfoGumpButtons
        {
            ButtonOk = 1,
            ButtonCancel = 2,
        }

    }
}
